package com.example.demo.controller;

import com.example.demo.common.Result;
import com.example.demo.model.Question;
import com.example.demo.service.QuestionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * MBTI测试题目控制器
 * 
 * 负责处理与测试题目相关的HTTP请求，包括获取单个题目、题目列表、搜索题目、修改和删除题目等功能。
 * 该控制器提供了题目管理的REST API接口，支持前端进行题目的增删改查操作。
 */
@RestController
@RequestMapping("/questions")
public class QuestionController {
    
    @Autowired
    private QuestionService questionService;

    /**
     * 根据题目ID获取单个题目
     *
     * @param questionId 题目ID
     * @return 包含题目信息的Result对象
     */
    @GetMapping("/{questionId}")
    public Result<Question> findById(@PathVariable("questionId") Integer questionId) {
        return Result.success(questionService.findById(questionId));
    }

    /**
     * 获取所有MBTI测试题目
     *
     * @return 包含所有题目列表的Result对象
     */
    @GetMapping("/list")
    public Result<List<Question>> findAll() {
        return Result.success(questionService.findAll());
    }
    
    /**
     * 搜索题目
     * 
     * @param keyword 关键词
     * @return 包含搜索结果的Result对象
     */
    @GetMapping("/search")
    public Result<List<Question>> search(
            @RequestParam(value = "keyword", required = false) String keyword) {
        return Result.success(questionService.search(keyword));
    }
    
    /**
     * 创建新题目
     *
     * @param question 题目信息
     * @return 创建后的题目信息
     */
    @PostMapping
    public Result<Question> create(@RequestBody Question question) {
        return Result.success(questionService.save(question));
    }
    
    /**
     * 更新题目
     *
     * @param questionId 题目ID
     * @param question 题目信息
     * @return 更新后的题目信息
     */
    @PutMapping("/{questionId}")
    public Result<Question> update(
            @PathVariable("questionId") Integer questionId,
            @RequestBody Question question) {
        question.setQuestionId(questionId);
        return Result.success(questionService.update(question));
    }
    
    /**
     * 删除题目
     *
     * @param questionId 题目ID
     * @return 操作结果
     */
    @DeleteMapping("/{questionId}")
    public Result<Boolean> delete(@PathVariable("questionId") Integer questionId) {
        return Result.success(questionService.deleteById(questionId));
    }
} 